#include <iostream>

using namespace std;

/*
 * 常函数
 *      1、成员函数后加const后称为常函数
 *      2、常函数内不可以修改成员属性
 *      3、成员属性声明时加关键字mutable后，在常函数中可以修改
 *
 * 常对象
 *      1、生命对象前加const称为常对象
 *      2、常对象只能调用常函数
 */

class Person{
public:
    // this指针本质是一个指针常量  指向不可以变，指向的值可以修改  Person * const this
    void test01() const
    {
//        this->a = 100;  // 常函数即 const Person * const this  指针指向的值也不可以改
        this->b = 200;
    }

    void test02(){

    }
    int a;
    mutable int b;
};

int main() {

    const Person p{};  //常对象
    p.b = 100;
    p.test01();
//    p.test02();  // 常对象只能调用常函数

    return 0;
}
